﻿#define _CRT_SECURE_NO_WARNINGS 1

//Lnux基本指令（2）






//1. man指令
//Linux的命令有很多参数，我们不可能全记住，可以通过查看联机手册获取帮助

//语法: man[选项] 命令 

//常用选项
//• - k 根据关键字搜索联机帮助
//• num 只在第num章节查找
//• - a 将所有章节的都显示出来，比如 man printf它缺省从第一章开始搜索，知道就停止，用a选
//项，当按下q退出，他会继续往后面搜索，直到所有章节都搜索完毕

//解释：man手册分为9章(不同系统可能会有差别)
//• 1是普通的命令
//• 2是系统调用, 如open, write之类的(通过这个，⾄少可以很⽅便的查到调用这个函数，需要加什么头文件)
//• 3是库函数, 如printf, fread4是特殊文件, 也就是 / dev下的各种设备文件
//• 4略
//• 5是指文件的格式, 比如passwd, 就会说明这个文件中各个字段的含义
//• 6是给游戏留的, 由各个游戏自己定义
//• 7是附件还有一些变量, ⽐如像environ这种全局变量在这⾥就有说明
//• 8是系统管理⽤的命令, 这些命令只能由root使⽤, 如ifconfig
//• 9略

//例如：想查看c语言中的printf怎么用，就调用3号接口：man 3 printf

//注意：如果不指定查找的手册，那么man命令会按照1-9号依次查询


//2.cp指令

//语法： cp[选项] 源文件或目录 目标文件或目录

//功能 : 复制文件或目录

//说明:
//• cp指令用于复制文件或目录
//• 如同时指定两个以上的文件或目录，且最后的目的地是⼀个已经存在的目录，则它会把前面指定的所有文件或目录复制到此目录中

//常用选项
//• - f或 --force 强⾏复制文件或目录，不论目的文件或目录是否已经存在
//• - i或 --interactive 覆盖文件之前先询问用户
//• - r递归处理，将指定目录下的文件与子目录⼀并处理。若源文件或目录的形态，不属于目录或符
//号链接，则一律视为普通文件处理


//3.echo指令（以及输出重定向）

//（1）echo指令
//语法：echo 字符串或任意要显示的东西 （ >  [目标文件] ）

//功能：把指令后面的东西写进对应的文件中（或者写入文件），如果后面目标文件为空，那么就是打印到显示器文件中

//（2）输出重定向
//  1）定义
//写入文件的这个操作叫做输出重定向：本来写入在显示器文件的内容，现在却要显示在目标文件中
//例如：echo "I Love You" > tu.c
//  2）特点
//但是这种输出重定向有一个特点：向目标文件写入时，会做两步：1.清空文件 2.写入新内容
//  2.1）根据这个特点，我们发现每次写入一个字符串或者其他东西时，总是会清空以前的东西，但是如果我们不向清空呢
//那就将大于符号改成两个大于符号（中间不能有空格），这个重定向就叫追加重定向
//例如：echo I Love You >> test.c
//  2.2）根据输出重定向的特点，如果我们想要清空文件，直接调用输出重定向即可
//例如：清空文件a.out：> a.out
//  2.3）根据输出重定向的特点，如果我们想要创建文件，不止可以使用touch指令，直接调用输出重定向即可
//例如创建文件test.txt：> test.txt



//4.cat指令

//语法： cat[选项][文件]

//功能：查看目标文件的内容（打印目标文件的内容）

//常用选项：
//• - b 对非空输出行编号，空行不做编号
//• - n 对输出的所有行编号
//• - s 不输出多行空行（如果有连续的两个以上空行，只打印一行）

//输入重定向：
//（1）cat如果后面什么都不跟，那么就默认从键盘读取
//（2）如果cat后面加 <（小于） 文件，这就是输入重定向，本来应该从文件中读取，现在不用从键盘读取，而是从指定文件读取，这就是输入重定向
//例如： cat < out.txt(把out.txt文件中的数据读出，然后打印到屏幕里）


//注：
//esho和cat的区别：
//（1）echo后面跟的不是文件，后面跟的时字符串或者要输出在显示器文件的东西，他会原封不动的将后面跟的东西打出来
//（2）而cat后米娜跟的时文件名，cat打印出来的是文件的内容


//5.mv指令（剪切并重命名）
//mv命令是move的缩写，可以用来移动文件或者文件改名（move (rename) files, 经常用来备份文件或者目录

//语法 :  mv[选项] 源文件或目录  目标文件或目录

//功能:
//1. 视mv命令中第二个参数类型的不同（是目标文件还是目标目录），mv命令将文件重命名或将其移至一个新的目录中
//2. 当第二个参数类型是文件时，mv命令完成文件重命名，此时，源文文件只能有一个（也可以是源目
//录名），它将所给的源文件或目录重命名为给定的目标文件名。
//3. 当第二个参数是已存在的目录名称时，源文件或目录参数可以有多个，mv命令将各参数指定的源
//文件均移至目标目录中。

//常用选项：
//• - f：force 强制的意思，如果目标文件已经存在，不会询问⽽直接覆盖
//• - i：若目标文件 (destination) 已经存在时，就会询问是否覆盖


//6.两个问题：
//（1）你是如何看待指令的？
//其实指令和可执行程序都是可以被执行的，所以，也就是说指令就是可执行程序
//（2）再执行指令之前，会做什么呢？
//因为我们输入一个非法指令，系统会报错，也就是说，在执行指令之前，系统会先查找对应的指令。

//总结：
//（1）查看系统的所有指令：在root用户下，使用指令 ls /usr/bin/即可查看，说明指令在系统的特定路径下存在的
//（2）指令本质就是可执行程序，和我们写的代码编译好的程序没有本质区别

//补充：
//1.查看指令所在路径：使用 which 指令，例如：which pwd
//2.Linux下一切皆文件，比如：键盘（从键盘进行读取）、显示器（向显示器打印（写入））、普通文件等


//7.alias指令(重命名）

//语法：alias [名字] = '指令';

//功能：给一堆复杂的指令取别名

//例如：系统中的ll就是：alias ll='ls - l';


//8.more指令

//由于cat不适合看大文本，知识和看小文本，于是便有了more指令

//语法： more[选项] 文本

//功能：more命令，功能类似cat当使用more指令时，more会先将这个文本中的内容占满屏幕，然后不会继续向下打印，当按下
//enter的时候，more便继续缓慢向下打印，按q退出

//常用选项：
//• - n 指定输出行数（n是行数）
//• q 退出more


//9.less命令（最常用）

//• less工具也是对文件或其它输出进行分页显示的工具，应该说是linux正统查看文件内容的工具，功能极其强⼤
//• less的用法比起 more 更加的有弹性，在 more 的时候，我们并没有办法向前面翻， 只能往后面看
//• 但若使用了 less 时，就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件，更
//容易用来查看一个文件的内容
//• 除此之外，在 less 里头可以拥有更多的搜索功能，不止可以向下搜，也可以向上搜。 

//语法： less [参数] 文件

//功能：less与more类似，但使用less可以随意浏览文件，而more仅能向前移动，却不能向后移动，⽽
//且less在查看之前不会加载整个文件。

//选项：
//• - i 忽略搜索时的大小写
//• - N 显示每行的行号
//• / 字符串：向下搜索“字符串”的功能
//• ? 字符串：向上搜索“字符串”的功能
//• n：重复前一个搜索（与 / 或  ?  有关）
//• N：反向重复前一个搜索（与 / 或 ? 有关）
//• q : 退出less

//10.head指令
//head与 tail 就像它的名字一样的浅显易懂，它是用来显示开头或结尾某个数量的文字区块，head用
//来显示档案的开头至标准输出中，而tail想当然就是看档案的结尾。

//语法：head [参数]... [文件]...

//功能：head用来显示档案的开头至标准输出中，默认head命令打印其相应文件的开头10行

//选项：
//• - n<行数> ：显示的行数


//11.tail指令

//tail命令从指定点开始将文件写到标准输出.使用tail命令的 - f选项可以方便的查阅正在改变的日志文
//件, tail  - f filename会把filename里最尾部的内容显示在屏幕上, 并且不断刷新, 使你看到最新的文件内容

//语法： tail 必要参数[文件]

//功能：用于显示指定文件末尾内容，不指定文件时，作为输入信息进行处理。常用查看日志文件。

//选项：
//• - f： 循环读取
//• - n<行数>： 显示行数

//注：
//如果想要获取一个文件中间的某n行，从1000行到1000+n行（使用head和tail）：
//方法1：用head取出前1000+n行放到一个临时文件中，然后使用tail指令对创建的临时文件取最后的n行
//管道
//如果不想创建临时的文件，怎么办呢？可以使用这个指令：head -1000+n log.txt |tail -n
//那么就要引入一个新知识了----管道，上面这个指令中的 | 就是管道
//  |  是一种符号，后面会被系统解释成为管道文件，这个文件是个内级的文件
//管道通常是支持流水线工作的




